3 research outputs found
A generic operational metatheory for algebraic effects
We provide a syntactic analysis of contextual preorder and equivalence for a polymorphic programming language with effects. Our approach applies uniformly across a range of algebraic effects, and incorporates, as instances: errors, input/output, global state, nondeterminism, probabilistic choice, and combinations thereof. Our approach is to extend Plotkin and Power’s structural operational semantics for algebraic effects (FoSSaCS 2001) with a primitive “basic preorder” on ground type computation trees. The basic preorder is used to derive notions of contextual preorder and equivalence on program terms. Under mild assumptions on this relation, we prove fundamental properties of contextual preorder (hence equivalence) including extensionality properties and a characterisation via applicative contexts, and we provide machinery for reasoning about polymorphism using relational parametricity
Minitutorial: BX in PL
Non UBCUnreviewedAuthor affiliation: University of BonnFacult
Understanding idiomatic traversals backwards and forwards
We present new ways of reasoning about a particular class of effectful Haskell
programs, namely those expressed as idiomatic traversals. Starting out with a
specific problem about labelling and unlabelling binary trees, we extract a general inversion law,
applicable to any monad, relating a traversal over the elements
of an arbitrary traversable type to a traversal that goes in the opposite
direction. This law can be invoked to show that, in a suitable sense, unlabelling
is the inverse of labelling. The inversion law, as well as a number of
other properties of idiomatic traversals, is a corollary of a more general theorem
characterising traversable functors as finitary containers:
an arbitrary traversable object can be decomposed uniquely into
shape and contents, and traversal be understood in terms of those.
Proof of the theorem involves the properties of traversal in a
special idiom related to the free applicative functor.status: publishe